package com.likeycy.my.map;

/**
 * @ClassName: MyMap
 * @Description: 定义Map接口
 * @Author: sodagreen
 * @Date: 2021/3/25 1:29
 * @Version: 1.0
 */
public interface MyMap<K, V> {

    /**
     * 获取集合长度
     * @return
     */
    int size();

    /**
     * 判断集合是否为空
     * @return
     */
    boolean isEmpty();

    /**
     * 清空集合
     */
    void clear();

    /**
     * 添加指定key与value
     * @param key 指定的key
     * @param value 指定key对应的value
     * @return
     */
    V put(K key, V value);

    /**
     * 根据指定key获取value
     * @param key
     * @return
     */
    V get(K key);

    /**
     * 根据指定key删除元素
     * @param key
     * @return
     */
    V remove(K key);

    /**
     * 根据指定key在集合内查找是否存在
     * @param key
     * @return
     */
    boolean containsKey(K key);

    /**
     * 根据指定value判断该value是否在集合内存在
     * @param value
     * @return
     */
    boolean containsValue(V value);

    /**
     * 遍历集合元素
     * @param visitor
     */
    void traversal(Visitor<K, V> visitor);


    abstract class Visitor<K, V>{
        boolean stop;
        public abstract boolean visit(K key, V value);
    }
}
